<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>1_高阶函数_函数柯里化</title>
    <style>
        .input_label {
            margin-left: 10px;
        }
    </style>
</head>
<body>
<!--准备好一个容器-->
<div id="test">

</div>
</body>

<!--核心库引入顺序，必须先是核心库然后在引入dom库-->
<script src="../js/react.development.js" crossorigin></script>
<!--用于支持react操作dom-->
<script src="../js/react-dom.development.js"></script>
<!--引入babel，用于将jsx转为js-->
<script src="../js/babel.min.js"></script>

<script type="text/babel">
    class Login extends React.Component {
        /**
         * #region
         * 高阶函数：
         * 如果一个函数符合下面两个规范中的任何一个，那么该函数就是高阶函数
         * 1.若A函数，接收的参数是一个函数
         * 2.若A函数，调用的返回值依然是个函数
         * 创建高阶函数有：
         * Promise / setTimeout /arr.map()
         *
         * 函数柯里化：
         * 通过函数调用维续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式
         * #endregion
         */

            //初始化状态
        state = {
            username: '',
            password: ''
        }

        handSubmit = (event) => {
            event.preventDefault()//阻止表单提交
            let {username, password} = this.state;
            alert(`用户：${username},密码：${password}`)
        }

        //保存表单数据到状态中(高阶函数)
        saveFormDate = (dateType, value) => {
            this.setState({[dateType]: value})
        }

        render() {
            return (
                <form onSubmit={this.handSubmit}>
                    <label>
                        用户名：<input type="text"
                                   onChange={event => this.saveFormDate('username', event.target.value)}
                                   name="username"/><br/>
                    </label>
                    <label>
                        密码：<input type="password"
                                  onChange={event => this.saveFormDate('password', event.target.value)}
                                  name="password"/><br/>
                    </label>
                    <button>登陆</button>
                </form>
            )
        }
    }

    //2·渲染组件
    ReactDOM.render(<Login/>, document.getElementById('test'))
</script>
</html>